// 输入一个英文句子，翻转句子中单词的顺序，但单词内字符的顺序不变。为简单起见，标点符号和普通字母一样处理。

function reverseWords(s: string): string {
    const stack: Array<string> = [];// 初始化存储栈
    let res: string = "";// 初始化结果变量
    let currWord: string = "";// 初始化当前遍历
    let isWord: boolean = false;// 标记单词遍历
    for (let i = 0; i < s.length; i++) {
        if (s[i] === " ") {
            isWord = true;// 遇到空格时设置标记变量，表明单词记录完成
        } else {
            if (isWord) {// 标记变量生效时，单词入栈，重置变量
                isWord = false;
                stack.push(currWord);
                currWord = "";
            }
            currWord += s[i];// 正常情况
        }
    }
    stack.push(currWord);// 最后一个单词后面因为没有空格所以别忘了添加
    // 通过栈实现逆序
    while (stack.length > 0) {
        res += stack.pop() + " ";
    }
    return res.trim();
};

// 这道题其实比较简单，最直接想到的方法是使用栈记录单词元素
// 对句子的处理需要主要注意空格的部分，这里用一种比较原始的方法
// 用一个变量isWord记录是否之前有遇到空格，这个方法同时也可以解决单词之间存在多个空格的情况
// 当isWord为真时，表明之前已经完成一个单词的记录，将当前的单词加入栈中
// 同时别忘了重置相关变量，否则一般情况下则存储字母进当前单词
// 当栈完成存储后，后面就是一个简单的while循环，输出栈中所有的元素
// 单词之间也别忘记拼接空格。
